﻿#ifdef WIN32
//通知编译器引入Windows NT4.0及其以后版本中的windows.h的特性
#define _WIN32_WINNT 0x400 

#include "../../../../../../unittest/framework/unittest.hh"
#include <stdio.h>
#include <windows.h>

#define FIBER_COUNT 5  //纤程数量

LPVOID fiberAddr[FIBER_COUNT];     //纤程地址
VOID WINAPI fiberProc(void* param);//纤程（回调）函数

VOID WINAPI fiberProc(void* param)
{
    int id = *((int*)param);
    printf("Fiber %d is running...\n", id);

    //切换回主纤程
    SwitchToFiber(fiberAddr[0]);
}

FIXTURE_BEGIN(test_co)

CASE(TESTCO) {
    fiberAddr[0] = ConvertThreadToFiber(NULL);//线程转化为纤程，返回纤程地址

    int i = 0;
    for (i = 1; i < FIBER_COUNT; i++)
    {
        //创建纤程
        fiberAddr[i] = CreateFiber(0,//dwStackSize，栈大小
            fiberProc,//lpStartAddress，纤程函数
            &i//lpParameter，参数
        );
        if (fiberAddr[i] != NULL)
        {
            printf("Fiber %d Created!\n", i);
        }
    }

    for (i = 1; i < FIBER_COUNT; i++)
    {
        if (fiberAddr[i] != NULL)
        {
            SwitchToFiber(fiberAddr[i]); //切换纤程
        }
    }
}

FIXTURE_END(test_co)

#endif